public class Solution36 {
    /**
     * 判断一个 9x9 的数独是否有效。只需要根据以下规则，验证已经填入的数字是否有效即可。
     *
     * 数字 1-9 在每一行只能出现一次。
     * 数字 1-9 在每一列只能出现一次。
     * 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
     *
     */
    public boolean isValidSudoku(char[][] board) {
        boolean[][] check = new boolean[27][9];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (board[i][j] == '.') continue;
                if (check[i][board[i][j] - '0' - 1]) return false;
                check[i][board[i][j] - '0' - 1] = true;
                if (check[9 + j][board[i][j] - '0' - 1]) return false;
                check[9 + j][board[i][j] - '0' - 1] = true;
                if (check[18 + (i / 3 ) * 3 + j / 3][board[i][j] - '0' - 1]) return false;
                check[18 + (i / 3 ) * 3 + j / 3][board[i][j] - '0' - 1] = true;
            }
        }
        return true;
    }
}
